package com.demo.common.data;

import com.fasterxml.jackson.core.type.TypeReference;
import com.demo.common.utils.JsonUtil;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

/**
 * 本地内存数据持久化接口
 */
public interface LocalDataPersistent {

    /**
     * 数据保存路径
     */
    String localDataSaveDir="D:/demo-temp/memoryData";

    /**
     * 保存当前数据
     * @param data
     */
    @SneakyThrows
    default void saveData(Object data){
        if(data==null){
            return;
        }
        String json = JsonUtil.object2Json(data);
        File dir = new File(localDataSaveDir);
        dir.mkdirs();
        BufferedWriter writer=new BufferedWriter(new FileWriter(new File(dir,getScene())));
        writer.write(json);
        writer.close();
    }

    /**
     * 获取场景
     * @return
     */
    default String getScene(){
        return this.getClass().getName();
    }


    /**
     * 获取持久化的数据
     * @param typeReference
     * @return
     */
    @SneakyThrows
    default <T> T getSavedData(TypeReference<T> typeReference){
        File file = new File(localDataSaveDir, getScene());
        if(!file.exists()){
            return null;
        }
        BufferedReader reader=new BufferedReader(new FileReader(file));
        String jsonData = reader.readLine();
        reader.close();
        if(StringUtils.isBlank(jsonData)){
            return null;
        }
        return JsonUtil.json2Object(jsonData,typeReference);
    }
}
